home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_CriticalStaticMulti.h < prev    next >
C/C++ Source or Header  |  2000-04-07  |  8KB  |  217 lines

  1. #ifndef CB_CRITICAL_STATIC_MULTI_H
  2. #define CB_CRITICAL_STATIC_MULTI_H
  3.  
  4. #include <assert.h>
  5.  
  6. #include "CB_CriticalSection.h"
  7. #include "CB_StaticMulti.h"
  8.  
  9. // defines for include files
  10. #define RELATION_CRITICAL_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  11. private:\
  12.     static ClassTo* _first##NameTo;\
  13.     static ClassTo* _last##NameTo;\
  14.     static int _count##NameTo;\
  15. \
  16. public:\
  17.     static CriticalSection _criticalSection##NameTo;\
  18. \
  19.     static void Add##NameTo##First(ClassTo* item);\
  20.     static void Add##NameTo##Last(ClassTo* item);\
  21.     static void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  22.     static void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  23.     static void Remove##NameTo(ClassTo* item);\
  24.     static void RemoveAll##NameTo();\
  25.     static void DeleteAll##NameTo();\
  26.     static void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  27.     static ClassTo* GetFirst##NameTo();\
  28.     static ClassTo* GetLast##NameTo();\
  29.     static ClassTo* GetNext##NameTo(ClassTo* pos);\
  30.     static ClassTo* GetPrev##NameTo(ClassTo* pos);\
  31.     static int Get##NameTo##Count();\
  32.     static int Includes##NameTo(ClassTo* item);\
  33.     static void Move##NameTo##First(ClassTo* item);\
  34.     static void Move##NameTo##Last(ClassTo* item);\
  35.     static void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  36.     static void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  37.     static void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  38.     ITERATOR_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  39.  
  40. #define RELATION_NOFILTER_CRITICAL_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  41. private:\
  42.     static ClassTo* _first##NameTo;\
  43.     static ClassTo* _last##NameTo;\
  44.     static int _count##NameTo;\
  45. \
  46. public:\
  47.     static CriticalSection _criticalSection##NameTo;\
  48. \
  49.     static void Add##NameTo##First(ClassTo* item);\
  50.     static void Add##NameTo##Last(ClassTo* item);\
  51.     static void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  52.     static void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  53.     static void Remove##NameTo(ClassTo* item);\
  54.     static void RemoveAll##NameTo();\
  55.     static void DeleteAll##NameTo();\
  56.     static void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  57.     static ClassTo* GetFirst##NameTo();\
  58.     static ClassTo* GetLast##NameTo();\
  59.     static ClassTo* GetNext##NameTo(ClassTo* pos);\
  60.     static ClassTo* GetPrev##NameTo(ClassTo* pos);\
  61.     static int Get##NameTo##Count();\
  62.     static int Includes##NameTo(ClassTo* item);\
  63.     static void Move##NameTo##First(ClassTo* item);\
  64.     static void Move##NameTo##Last(ClassTo* item);\
  65.     static void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  66.     static void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  67.     static void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  68.     ITERATOR_NOFILTER_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  69.  
  70. #define RELATION_CRITICAL_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  71. public:\
  72.     ClassTo* _prev##NameFrom;\
  73.     ClassTo* _next##NameFrom;
  74.  
  75. #define INIT_CRITICAL_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) 
  76.  
  77. #define EXIT_CRITICAL_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  78.  
  79. #define REPLACE_CRITICAL_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  80.  
  81. #define INIT_CRITICAL_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  82. {\
  83.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  84.     INIT_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  85. }
  86.  
  87. #define EXIT_CRITICAL_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  88. {\
  89.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  90.     EXIT_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  91. }
  92.  
  93. #define REPLACE_CRITICAL_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  94. {\
  95.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  96.     REPLACE_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  97. }
  98.  
  99. #define METHODS_CRITICAL_STATIC_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  100.     ClassTo* ClassFrom##::_first##NameTo = (ClassTo*)0;\
  101.     ClassTo* ClassFrom##::_last##NameTo = (ClassTo*)0;\
  102.     int ClassFrom##::_count##NameTo = 0;\
  103.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  104. void ClassFrom##::Add##NameTo##First(ClassTo* item)\
  105. {\
  106.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  107.     METHOD_STATIC_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  108. }\
  109. \
  110. void ClassFrom##::Add##NameTo##Last(ClassTo* item)\
  111. {\
  112.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  113.     METHOD_STATIC_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  114. }\
  115. \
  116. void ClassFrom##::Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  117. {\
  118.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  119.     METHOD_STATIC_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  120. }\
  121. \
  122. void ClassFrom##::Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  123. {\
  124.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  125.     METHOD_STATIC_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  126. }\
  127. \
  128. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  129. {\
  130.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  131.     METHOD_STATIC_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  132. }\
  133. \
  134. void ClassFrom##::RemoveAll##NameTo()\
  135. {\
  136.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  137.     METHOD_STATIC_MULTI_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  138. }\
  139. \
  140. void ClassFrom##::DeleteAll##NameTo()\
  141. {\
  142.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  143.     METHOD_STATIC_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  144. }\
  145. \
  146. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  147. {\
  148.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  149.     METHOD_STATIC_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  150. }\
  151. \
  152. ClassTo* ClassFrom##::GetFirst##NameTo()\
  153. {\
  154.     METHOD_STATIC_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  155. }\
  156. \
  157. ClassTo* ClassFrom##::GetLast##NameTo()\
  158. {\
  159.     METHOD_STATIC_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  160. }\
  161. \
  162. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  163. {\
  164.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  165.     METHOD_STATIC_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  166. }\
  167. \
  168. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  169. {\
  170.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  171.     METHOD_STATIC_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  172. }\
  173. \
  174. int ClassFrom##::Get##NameTo##Count()\
  175. {\
  176.     METHOD_STATIC_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  177. }\
  178. \
  179. int ClassFrom##::Includes##NameTo(ClassTo* item)\
  180. {\
  181.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  182.     METHOD_STATIC_MULTI_INCLUDES(ClassFrom, NameFrom, ClassTo, NameTo) \
  183. }\
  184. \
  185. void ClassFrom##::Move##NameTo##First(ClassTo* item)\
  186. {\
  187.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  188.     METHOD_STATIC_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  189. }\
  190. \
  191. void ClassFrom##::Move##NameTo##Last(ClassTo* item)\
  192. {\
  193.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  194.     METHOD_STATIC_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  195. }\
  196. \
  197. void ClassFrom##::Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  198. {\
  199.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  200.     METHOD_STATIC_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  201. }\
  202. \
  203. void ClassFrom##::Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  204. {\
  205.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  206.     METHOD_STATIC_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  207. }\
  208. \
  209. void ClassFrom##::Sort##NameTo(int (*comp)(ClassTo*, ClassTo*))\
  210. {\
  211.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  212.     METHOD_STATIC_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  213. }
  214.  
  215. #define METHODS_CRITICAL_STATIC_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  216.  
  217. #endif